#define D2D_INPUT_COUNT 1
#define D2D_INPUT1_COMPLEX

//指示着色器函数调用使用场景位置值的帮助器方法
#define D2D_REQUIRES_SCENE_POSITION
#include "d2d1effecthelpers.hlsli"

float range;
int number;
float2 size;

static int graySum[255] ;
static float redSum[255] ;
static float greenSum[255] ;
static float blueSum[255] ;

int toGray(float4 col ){
    return (col.r*255+col.g*255+col.b*255)/3;
}

void recordInfo(float4 col){
    int gray = toGray(col);
    int sommthIndex = gray*number >>8;
    graySum[sommthIndex]++;
    redSum[sommthIndex] +=col.r;
    greenSum[sommthIndex] +=col.g;
    blueSum[sommthIndex] +=col.b;
}

D2D_PS_ENTRY(main){
    
    //获取当前像素在屏幕上的位置 (绝对位置)
    float2 pos = D2DGetScenePosition().xy;
    //获取当前像素
    float4 cols = D2DGetInput(0);
    if(pos.x>size.x||pos.y>size.y||cols.a==0)
    return float4(0,0,0,0);
    //获取当前像素在屏幕上的坐标（相对位置）
    // pos = D2DGetInputCoordinate(0).xy;
    for(float x = 0;x<20;x++){
        for(float y = 0;y<20;y++){
            float dx =pos.x+ (x/20*range);
            float dy =pos.y+ (y/20*range);
            dx = dx<0?0:dx>size.x?size.x:dx;
            dy = dy<0?0:dy>size.y?size.y:dy;
            float4 col =  D2DSampleInputAtPosition(0,float2(dx,dy));
            int gray = toGray(col);
            int sommthIndex = gray*number >>8;
            graySum[sommthIndex]++;
            redSum[sommthIndex] +=col.r;
            greenSum[sommthIndex] +=col.g;
            blueSum[sommthIndex] +=col.b;
            // recordInfo( D2DSampleInputAtPosition(0,float2(dx,dy)));
        }
    }
    float max =0;
    int maxIndex =0;
    for(int i =0;i<255;i++){
        if(graySum[i]>max){
            max = graySum[i];
            maxIndex = i;
        }
        if(i>=number){
            break;
        }
    }
    
    float4 color =float4(redSum[maxIndex]/max,greenSum[maxIndex]/max,blueSum[maxIndex]/max,cols.a);
    return color;
}